iT邦幫忙

1

C/C++ struct使用

  • 分享至 

  • xImage
  •  

建立一個結構

使用方式如下

struct 結構名稱{
    結構變數;
};

例如:
宣告時

struct Student_Data {
    char name[10];
    int age;
};

建立結構
根據C或C++分兩種方式
C
struct Student_Data stu;
C++
Student_Data stu;
兩個語法是不一樣的。
宣告完後直接使用

strcpy(stu.name,"nick");
stu.age = 25;
printf("The student's name is: %s\n", stu.name);
printf("The student's age is: %d\n", stu.age);

或是想要直接在宣告的時候就建立結構,也可以寫成

struct Student_Data {
    char name[10];
    int age;
}stu;
strcpy(stu.name,"nick");
stu.age = 25;
printf("The student's name is: %s\n", stu.name);
printf("The student's age is: %d\n", stu.age);

那麼若你只想要使用一次,struct結構名稱也可以不用寫

struct{
    char name[10];
    int age;
}stu;
strcpy(stu.name,"nick");
stu.age = 25;
printf("The student's name is: %s\n", stu.name);
printf("The student's age is: %d\n", stu.age);

但這樣如果你想要新宣告一個結構實體就不行了。

使用typedef

typedef 的其中一個用法,就是將一個資料型態取一個別名
於是我們也可以將上面的struct改成

typedef struct Student_Data {
    char name[10];
    int age;
}stu_data;

這麼一來我們就把struct Student_Data這個型態,取了一個別名叫做stu_data
在使用的時候我們就不需要管他是C或是C++語法,利用別名宣告結構

stu_data stu;
    
strcpy(stu.name,"nick");
stu.age = 25;
printf("The student's name is: %s\n", stu.name);
printf("The student's age is: %d\n", stu.age);
Linked list宣告
C語言的宣告方式
struct list {
    int data;
    struct list *next;
};

那C++裡面就不一定要加struct了

struct list {
    int data;
    list *next;
};

要記住不管怎樣struct list *型態都要是pointer,不然就重複宣告了
要用class的話也是一樣

class Node {
public:
    int data;
    Node* next;
};

其他宣告方式可以參考[3]

建構函式

 struct ListNode {
     int val;
     ListNode *next;
     ListNode() : val(0), next(nullptr) {}
     ListNode(int x) : val(x), next(nullptr) {}
     ListNode(int x, ListNode *next) : val(x), next(next) {}
 };

宣告ListNode node; 則會呼叫預設的建構函式 ListNode() : val(0), next(nullptr) {}
也可以透過ListNode node(1);呼叫其他建構函式把member設值。

reference :
[1] http://c.biancheng.net/view/2031.html
[2] http://vincecc.blogspot.com/2013/10/cc-typedef-struct-typedef-struct.html
[3] http://ccd9527.blogspot.com/2014/04/typedef-link-list.html
[4] https://www.itread01.com/content/1549846821.html


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言